翻訳と辞書
Words near each other
・ Java Desktop System
・ Java Development Kit
・ Java EE
・ Java Foundation Classes
・ Java Management Extensions
・ Java ME
・ Java Media Framework
・ Java Message Service
・ Java Naming and Directory Interface
・ Java Native Access
・ Java Native Interface
・ Java OpenGL
・ Java OS
・ Java Persistence API
・ Java Platform
・ Java platform
・ Java Platform, Enterprise Edition
・ Java Platform, Micro Edition
・ Java Platform, Standard Edition
・ Java Remote Method Invocation


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

Java Native Interface : ウィキペディア日本語版
Java Native Interface
Java Native Interface (JNI) は、Javaプラットフォームにおいて、Javaで記述されたプログラムと、他の言語(たとえばCC++など)で書かれた、実際のCPUの上で動作するコード(ネイティブコード)とを連携するためのインタフェース仕様である。Java言語からネイティブコードを利用するためのABIと、逆にネイティブコードからJavaバイトコードを動作させるためのバーチャルマシンを利用するためのAPIの2つから成る。
JNIを使うことで、Java言語のバーチャルマシンで動作させるには処理速度の面で不利とされる計算量の多いプログラムを部分的にネイティブコードに置き換えて高速化したり、標準クラスライブラリからはアクセスできないオペレーティングシステムの機能を利用するプログラムを、あたかも通常のJavaクラスのように呼び出したりできるようになる。Java言語以外のJava VM上で動作する言語からも利用可能である。
JNIによる、Javaバーチャルマシンからネイティブコードの呼び出しは、バーチャルマシンの実行環境の一貫性を保つために、通常のJavaプログラムの実行時とは異なる例外的なメモリ管理や排他制御を必要とする場合があり、しばしばプログラムの実行速度の低下を招くことがある。そのため、単純にJNIを利用することでアプリケーション性能を改善できるというわけではない。
== JNIの動作 ==
JNIフレームワークでは、ネイティブ関数は.cもしくは.cppファイルに分離して実装する。C++はJNIに対して多少洗練されたインターフェイスを提供する。Java VMは''JNIEnv''ポインタ、''jobject''ポインタ、そしてJavaメソッドで定義されたすべてのJava引数を通して、ネイティブな関数を起動する。JNI関数は以下のような形式となる。
 

JNIEXPORT void JNICALL Java_ClassName_MethodName
(JNIEnv
*env, jobject obj)


 
''env''ポインタはJava VMへのインタフェースを含む構造体である。これはJava VMとの相互作用および、Javaオブジェクトとの連携に必要な全ての関数を含んでいる。JNI関数の例としては、ネイティブ配列とJava配列の相互変換、ネイティブ文字列とJava文字列の相互変換、オブジェクトのインスタンス化、例外の送出などが挙げられる。基本的には、Javaコードでできることは全てJNIEnvを用いて行うことができる。以下の例示ではJava文字列をネイティブな文字列に変換する。
 

//C++ code
JNIEXPORT void JNICALL Java_ClassName_MethodName
(JNIEnv
*env, jobject obj, jstring javaString)


 

/
*C code
*/
JNIEXPORT void JNICALL Java_ClassName_MethodName
(JNIEnv
*env, jobject obj, jstring javaString)


 
C++ではJavaのように、オブジェクトのメソッドという概念を持つため、C++のJNIコードはCのそれに比べて文法的に多少クリアである。
Cではenvパラメータは(
*env)->
で被参照され、env
はオブジェクトメソッド起動セマンティクスの一部として、明示的にJNIEnvメソッドに渡されなければならない。
C++ではenvパラメータはenv->で被参照される。envパラメータはオブジェクトメソッド起動セマンティクスの一部として暗黙的に渡される。
ネイティブ変数型とJava変数型はそれぞれ相互変換をすることができる。オブジェクトや配列、文字列などの合成型のために、ネイティブコードはJNIEnvのメソッド呼び出しにおいて、明示的なデータの変換を行う必要がある。

抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「Java Native Interface」の詳細全文を読む




スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.